package com.zg.paging3.activity.net

import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import androidx.paging.ExperimentalPagingApi
import androidx.paging.Pager
import androidx.paging.PagingConfig
import androidx.paging.cachedIn

/***
 * @Author:      zxd
 * @CreateDate:  2021/7/9 8:43
 * @Description: PagingData 分页数据
 * 分页数据的容器被称为 PagingData，每次刷新数据时，都会创建一个 PagingData的实例。
 * 如果要创建 PagingData 数据流，您需要创建一个 Pager 实例，并提供一个 PagingConfig 配置对象和一个可以告诉 Pager 如何获取您实现的 PagerSource 的实例的函数，以供 Pager 使用。
 */
class NetDataViewModel : ViewModel() {

    //下面是通过flow的形式获取数据
    private val repository = NetDataRepositroty()

//    @ExperimentalPagingApi
    var articleList =
        Pager(
            config = PagingConfig(
                pageSize = 20,// 每页显示的数据的大小。对应 PagingSource 里 LoadParams.loadSize
                // 预刷新的距离，距离最后一个 item 多远时加载数据，默认为 pageSize
                // prefetchDistance = 3,
                enablePlaceholders = false,
                // 一次应在内存中保存的最大数据，默认为 Int.MAX_VALUE
                //maxSize = 200,
                initialLoadSize = 20    // 初始化加载数量，默认为 pageSize * 3
            ), /*remoteMediator = NetDataRemoteMediator(),*/
            // 数据源，要求返回的是 PagingSource 类型对象
            pagingSourceFactory = {
                NetDataSource(repository)
            }
        ).flow.cachedIn(viewModelScope)// 最后构造的和外部交互对象，有 flow 和 liveData 两种
}